package com.dyz.wsw.common.utils.security;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Map;

/**
 * @author dyz
 * Time 2024/6/28 15:31
 */
public class JWTs {

    /**
     * 生成jwt令牌(在没有引入redis等缓存机制时,可以用这个jwt来生成可过期的令牌)
     * @param payload 载荷
     * @param secret 密钥
     * @return jwt串
     */
    public static String generate(Map<String,Object> payload,String secret){

        return Jwts.builder()
                .signWith(generateKey(secret))
                .claims(payload)
                .compact();
    }


    /**
     * 校验jwt
     * @param token 校验对象
     * @param secret 密钥/公钥?
     * @return payload
     */
    public static Claims parse(String token, String secret){
        JwtParser jwtParser = Jwts.parser()
                .requireIssuer("dyz")
                .verifyWith(generateKey(secret))
                .build();

        return jwtParser.parseSignedClaims(token).getPayload();
    }

    /**
     * 生成HMAC密钥,根据提供的字节数组长度选择适当的HMAC算法，并返回响应的SecretKey
     * @param secret 密钥
     * @return SecretKey
     */
    public static SecretKey generateKey(String secret){
        return Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8));
    }

}